Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / Dockerfile.hardened

Displaying Raw • Download


Dockerfile.hardened c0b0ddffd735a0d007c1be9a5e8563ec42fdafc0 (c0b0ddff) Text, 5.24 KB

Tff7b72#Tff7b72 syntax=dockerTff7b72/Tff7b72dockerfile:1
Tff7b72#Tff7b72 Multi-stage image on Wolfi (Chainguard): Node dev for frontend, Python dev for
Tff7b72#Tff7b72 PoetryTff7b72/Tff7b72cffi builds, Python dev for runtime so native libs can be installed with
Tff7b72#Tff7b72 apk (the minimal chainguardTff7b72/Tff7b72python image has no shell or package manager).
Tff7b72#Tff7b72 Wolfi provides the opus package (libopus); Alpine's opusfile split is not present.
Tff7b72#Tff7b72 Glibc runtime uses LXST wheels as published; the musl filterlib bake is not used.
Tff7b72#Tff7b72 Voicemail greeting synthesis is optional without espeak-ng (see voicemail_manager).

Te6edf3ARG Te6edf3NODE_IMAGETff7b72=Te6edf3cgrTb4b4b4.Te6edf3devTff7b72/Te6edf3chainguardTff7b72/Te6edf3nodeTff7b72:Te6edf3latestTff7b72-Te6edf3dev
Te6edf3ARG Te6edf3PYTHON_BUILD_IMAGETff7b72=Te6edf3cgrTb4b4b4.Te6edf3devTff7b72/Te6edf3chainguardTff7b72/Te6edf3pythonTff7b72:Te6edf3latestTff7b72-Te6edf3dev
Te6edf3ARG Te6edf3PYTHON_RUNTIME_IMAGETff7b72=Te6edf3cgrTb4b4b4.Te6edf3devTff7b72/Te6edf3chainguardTff7b72/Te6edf3pythonTff7b72:Te6edf3latestTff7b72-Te6edf3dev

Te6edf3FROM Tff7b72-Tff7b72-Te6edf3platformTff7b72=Te6edf3linuxTff7b72/Te6edf3amd64 Te6edf3$Tb4b4b4{Te6edf3NODE_IMAGETb4b4b4} Te6edf3AS Te6edf3buildTff7b72-Te6edf3frontend
Te6edf3USER Te6edf3root
Te6edf3WORKDIR Tff7b72/Te6edf3src
Tff7b72#Tff7b72 go is required to compile visualiser-wasm (gitignored binary; not in image context)
Te6edf3RUN Te6edf3apk Te6edf3add Tff7b72-Tff7b72-Te6edf3noTff7b72-Te6edf3cache Te6edf3git Te6edf3python3 Te6edf3go
Te6edf3COPY Te6edf3packageTb4b4b4.Te6edf3json Te6edf3pnpmTff7b72-Te6edf3lockTb4b4b4.Te6edf3yaml Te6edf3pnpmTff7b72-Te6edf3workspaceTb4b4b4.Te6edf3yaml Te6edf3viteTb4b4b4.Te6edf3configTb4b4b4.Te6edf3js Tb4b4b4.Tff7b72/
Te6edf3COPY Te6edf3patches Tb4b4b4.Tff7b72/Te6edf3patches
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3fetchTff7b72-Te6edf3micronTff7b72-Te6edf3wasmTb4b4b4.Te6edf3mjs Te6edf3scriptsTff7b72/Te6edf3fetchTff7b72-Te6edf3micronTff7b72-Te6edf3wasmTb4b4b4.Te6edf3mjs
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3micronTff7b72-Te6edf3wasmTff7b72-Te6edf3resolveTff7b72-Te6edf3bundledTb4b4b4.Te6edf3mjs Te6edf3scriptsTff7b72/Te6edf3micronTff7b72-Te6edf3wasmTff7b72-Te6edf3resolveTff7b72-Te6edf3bundledTb4b4b4.Te6edf3mjs
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3micronTff7b72-Te6edf3parserTff7b72-Te6edf3goTff7b72-Te6edf3versionTb4b4b4.Te6edf3mjs Te6edf3scriptsTff7b72/Te6edf3micronTff7b72-Te6edf3parserTff7b72-Te6edf3goTff7b72-Te6edf3versionTb4b4b4.Te6edf3mjs
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3buildTff7b72-Te6edf3visualiserTff7b72-Te6edf3wasmTb4b4b4.Te6edf3mjs Te6edf3scriptsTff7b72/Te6edf3buildTff7b72-Te6edf3visualiserTff7b72-Te6edf3wasmTb4b4b4.Te6edf3mjs
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3syncTff7b72-Te6edf3meshchatxTff7b72-Te6edf3docsTb4b4b4.Te6edf3js Te6edf3scriptsTff7b72/Te6edf3syncTff7b72-Te6edf3meshchatxTff7b72-Te6edf3docsTb4b4b4.Te6edf3js
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3pip_rns_remotesTb4b4b4.Te6edf3py Te6edf3scriptsTff7b72/Te6edf3pip_rns_remotesTb4b4b4.Te6edf3py
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3buildTff7b72/Te6edf3fetch_reticulum_manualTb4b4b4.Te6edf3py Te6edf3scriptsTff7b72/Te6edf3buildTff7b72/Te6edf3fetch_reticulum_manualTb4b4b4.Te6edf3py
Te6edf3COPY Te6edf3docs Tb4b4b4.Tff7b72/Te6edf3docs
Te6edf3COPY Te6edf3visualiserTff7b72-Te6edf3wasm Tb4b4b4.Tff7b72/Te6edf3visualiserTff7b72-Te6edf3wasm
Te6edf3COPY Te6edf3meshchatxTff7b72/Te6edf3srcTff7b72/Te6edf3frontend Tb4b4b4.Tff7b72/Te6edf3meshchatxTff7b72/Te6edf3srcTff7b72/Te6edf3frontend
Te6edf3ENV Te6edf3GOCACHETff7b72=Tff7b72/Te6edf3tmpTff7b72/Te6edf3goTff7b72-Te6edf3cache
Te6edf3ENV Te6edf3GOTMPDIRTff7b72=Tff7b72/Te6edf3tmpTff7b72/Te6edf3goTff7b72-Te6edf3tmp
Te6edf3RUN Te6edf3mkdir Tff7b72-Te6edf3p Tff7b72/Te6edf3tmpTff7b72/Te6edf3goTff7b72-Te6edf3cache Tff7b72/Te6edf3tmpTff7b72/Te6edf3goTff7b72-Te6edf3tmp Tff7b72&Tff7b72& \
Te6edf3npm Te6edf3install Tff7b72-Te6edf3g Te6edf3pnpmT79c0ff@11.1T79c0ff.2 Tff7b72&Tff7b72& \
Te6edf3pnpm Te6edf3config Te6edf3set Te6edf3verifyTff7b72-Te6edf3storeTff7b72-Te6edf3integrity Tffa657true Tff7b72&Tff7b72& \
Te6edf3pnpm Te6edf3install Tff7b72-Tff7b72-Te6edf3frozenTff7b72-Te6edf3lockfile Tff7b72&Tff7b72& \
Te6edf3MESHCHATX_REQUIRE_VISUALISER_WASMTff7b72=T79c0ff1 Te6edf3pnpm Te6edf3run Te6edf3buildTff7b72-Te6edf3frontend Tff7b72&Tff7b72& \
Te6edf3test Tff7b72-Te6edf3s Te6edf3meshchatxTff7b72/Te6edf3srcTff7b72/Te6edf3frontendTff7b72/Te6edf3publicTff7b72/Te6edf3vendorTff7b72/Te6edf3visualiserTff7b72-Te6edf3wasmTff7b72/Te6edf3visualiserTb4b4b4.Te6edf3wasm Tff7b72&Tff7b72& \
Te6edf3test Tff7b72-Te6edf3s Te6edf3meshchatxTff7b72/Te6edf3srcTff7b72/Te6edf3frontendTff7b72/Te6edf3publicTff7b72/Te6edf3vendorTff7b72/Te6edf3visualiserTff7b72-Te6edf3wasmTff7b72/Te6edf3wasm_execTb4b4b4.Te6edf3js Tff7b72&Tff7b72& \
Te6edf3test Tff7b72-Te6edf3s Te6edf3meshchatxTff7b72/Te6edf3srcTff7b72/Te6edf3frontendTff7b72/Te6edf3publicTff7b72/Te6edf3vendorTff7b72/Te6edf3micronTff7b72-Te6edf3parserTff7b72-Te6edf3goTff7b72/Te6edf3micronTff7b72-Te6edf3parserTff7b72-Te6edf3goTb4b4b4.Te6edf3wasm Tff7b72&Tff7b72& \
Te6edf3test Tff7b72-Te6edf3s Te6edf3meshchatxTff7b72/Te6edf3srcTff7b72/Te6edf3frontendTff7b72/Te6edf3publicTff7b72/Te6edf3vendorTff7b72/Te6edf3micronTff7b72-Te6edf3parserTff7b72-Te6edf3goTff7b72/Te6edf3wasm_execTb4b4b4.Te6edf3js Tff7b72&Tff7b72& \
Te6edf3pnpm Te6edf3run Te6edf3buildTff7b72-Te6edf3docs

Te6edf3FROM Te6edf3$Tb4b4b4{Te6edf3PYTHON_BUILD_IMAGETb4b4b4} Te6edf3AS Te6edf3builder
Te6edf3USER Te6edf3root
Te6edf3WORKDIR Tff7b72/Te6edf3build
Te6edf3RUN Te6edf3apk Te6edf3add Tff7b72-Tff7b72-Te6edf3noTff7b72-Te6edf3cache Te6edf3buildTff7b72-Te6edf3base Te6edf3git Te6edf3pkgconf Te6edf3opensslTff7b72-Te6edf3dev Te6edf3libffiTff7b72-Te6edf3dev Te6edf3linuxTff7b72-Te6edf3headers

Te6edf3RUN Te6edf3pip Te6edf3install Tff7b72-Tff7b72-Te6edf3noTff7b72-Te6edf3cacheTff7b72-Te6edf3dir Tff7b72-Tff7b72-Te6edf3upgrade Ta5d6ff"Ta5d6ffpip>=26.0Ta5d6ff" Te6edf3uv Te6edf3setuptools Te6edf3wheel Ta5d6ff"Ta5d6ffjaraco.context>=6.1.0Ta5d6ff"

Te6edf3RUN Te6edf3python Tff7b72-Te6edf3m Te6edf3venv Tff7b72/Te6edf3optTff7b72/Te6edf3venv
Te6edf3ENV Te6edf3PATHTff7b72=Ta5d6ff"Ta5d6ff/opt/venv/bin:$PATHTa5d6ff"

Te6edf3RUN Te6edf3pip Te6edf3install Tff7b72-Tff7b72-Te6edf3noTff7b72-Te6edf3cacheTff7b72-Te6edf3dir Tff7b72-Tff7b72-Te6edf3upgrade Ta5d6ff"Ta5d6ffpip>=26.0Ta5d6ff" Ta5d6ff"Ta5d6ffsetuptoolsTa5d6ff" Ta5d6ff"Ta5d6ffjaraco.context>=6.1.0Ta5d6ff"

Te6edf3COPY Te6edf3pyprojectTb4b4b4.Te6edf3toml Te6edf3uvTb4b4b4.Te6edf3lock Te6edf3READMETb4b4b4.Te6edf3md Te6edf3CHANGELOGTb4b4b4.Te6edf3md Tb4b4b4.Tff7b72/
Te6edf3COPY Te6edf3logo Tb4b4b4.Tff7b72/Te6edf3logo
Te6edf3COPY Te6edf3vendor Tb4b4b4.Tff7b72/Te6edf3vendor
Te6edf3RUN Te6edf3uv Te6edf3sync Tff7b72-Tff7b72-Te6edf3noTff7b72-Te6edf3group Te6edf3dev Tff7b72-Tff7b72-Te6edf3noTff7b72-Te6edf3installTff7b72-Te6edf3project Tff7b72&Tff7b72& \
Te6edf3rm Tff7b72-Te6edf3rf Tff7b72/Te6edf3rootTff7b72/Tb4b4b4.Te6edf3cacheTff7b72/Te6edf3pip Tff7b72/Te6edf3rootTff7b72/Tb4b4b4.Te6edf3cacheTff7b72/Te6edf3uv

Te6edf3COPY Te6edf3meshchatx Tb4b4b4.Tff7b72/Te6edf3meshchatx
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3patch_lxst_pyogg_ogg_ctypesTb4b4b4.Te6edf3py Tb4b4b4.Tff7b72/Te6edf3scriptsTff7b72/Te6edf3patch_lxst_pyogg_ogg_ctypesTb4b4b4.Te6edf3py
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3patch_lxst_codec2_optionalTb4b4b4.Te6edf3py Tb4b4b4.Tff7b72/Te6edf3scriptsTff7b72/Te6edf3patch_lxst_codec2_optionalTb4b4b4.Te6edf3py
Te6edf3COPY Tff7b72-Tff7b72-Te6edf3fromTff7b72=Te6edf3buildTff7b72-Te6edf3frontend Tff7b72/Te6edf3srcTff7b72/Te6edf3meshchatxTff7b72/Te6edf3public Tb4b4b4.Tff7b72/Te6edf3meshchatxTff7b72/Te6edf3public

Te6edf3RUN Te6edf3pip Te6edf3install Tff7b72-Tff7b72-Te6edf3noTff7b72-Te6edf3cacheTff7b72-Te6edf3dir Tb4b4b4. Tff7b72&Tff7b72& \
Te6edf3python Te6edf3scriptsTff7b72/Te6edf3patch_lxst_pyogg_ogg_ctypesTb4b4b4.Te6edf3py Tff7b72&Tff7b72& \
Te6edf3python Te6edf3scriptsTff7b72/Te6edf3patch_lxst_codec2_optionalTb4b4b4.Te6edf3py Tff7b72&Tff7b72& \
Te6edf3rm Tff7b72-Te6edf3rf Tff7b72/Te6edf3optTff7b72/Te6edf3venvTff7b72/Te6edf3libTff7b72/Te6edf3pythonTff7b72*Tff7b72/Te6edf3siteTff7b72-Te6edf3packagesTff7b72/Te6edf3LXSTTff7b72/Te6edf3PlatformsTff7b72/Te6edf3android Tff7b72&Tff7b72& \
Te6edf3find Tff7b72/Te6edf3optTff7b72/Te6edf3venv Tff7b72-Te6edf3type Te6edf3d Tff7b72-Te6edf3name Ta5d6ff"Ta5d6fftestsTa5d6ff" Tff7b72-Te6edf3exec Te6edf3rm Tff7b72-Te6edf3rf Tb4b4b4{Tb4b4b4} Tff7b72+ Tff7b72&Tff7b72& \
Te6edf3find Tff7b72/Te6edf3optTff7b72/Te6edf3venv Tff7b72-Te6edf3type Te6edf3d Tff7b72-Te6edf3name Ta5d6ff"Ta5d6fftestTa5d6ff" Tff7b72-Te6edf3exec Te6edf3rm Tff7b72-Te6edf3rf Tb4b4b4{Tb4b4b4} Tff7b72+ Tff7b72&Tff7b72& \
Te6edf3find Tff7b72/Te6edf3optTff7b72/Te6edf3venv Tff7b72-Te6edf3type Te6edf3d Tff7b72-Te6edf3name Ta5d6ff"Ta5d6ff__pycache__Ta5d6ff" Tff7b72-Te6edf3exec Te6edf3rm Tff7b72-Te6edf3rf Tb4b4b4{Tb4b4b4} Tff7b72+ Tff7b72&Tff7b72& \
Te6edf3python Tff7b72-Te6edf3m Te6edf3compileall Tff7b72-Te6edf3q Tff7b72/Te6edf3optTff7b72/Te6edf3venv

Te6edf3FROM Te6edf3$Tb4b4b4{Te6edf3PYTHON_RUNTIME_IMAGETb4b4b4}

Te6edf3ARG Te6edf3OCI_REVISIONTff7b72=Ta5d6ff"Ta5d6ff"
Te6edf3ARG Te6edf3OCI_VERSIONTff7b72=Ta5d6ff"Ta5d6ff"
Te6edf3ARG Te6edf3OCI_CREATEDTff7b72=Ta5d6ff"Ta5d6ff"

Te6edf3USER Te6edf3root
Te6edf3RUN Te6edf3apk Te6edf3add Tff7b72-Tff7b72-Te6edf3noTff7b72-Te6edf3cache Te6edf3opus Te6edf3libffi Te6edf3shadow Tff7b72&Tff7b72& \
Te6edf3pip Te6edf3install Tff7b72-Tff7b72-Te6edf3noTff7b72-Te6edf3cacheTff7b72-Te6edf3dir Tff7b72-Tff7b72-Te6edf3upgrade Ta5d6ff"Ta5d6ffpip>=26.0Ta5d6ff" Ta5d6ff"Ta5d6ffsetuptoolsTa5d6ff" Ta5d6ff"Ta5d6ffjaraco.context>=6.1.0Ta5d6ff" Tff7b72&Tff7b72& \
Te6edf3rm Tff7b72-Te6edf3rf Tff7b72/Te6edf3rootTff7b72/Tb4b4b4.Te6edf3cacheTff7b72/Te6edf3pip Tff7b72&Tff7b72& \
Te6edf3groupadd Tff7b72-Te6edf3g T79c0ff1000 Te6edf3meshchat Tff7b72&Tff7b72& \
Te6edf3useradd Tff7b72-Tff7b72-Te6edf3uid T79c0ff1000 Tff7b72-Tff7b72-Te6edf3gid T79c0ff1000 Tff7b72-Tff7b72-Te6edf3createTff7b72-Te6edf3home Tff7b72-Tff7b72-Te6edf3homeTff7b72-Te6edf3dir Tff7b72/Te6edf3homeTff7b72/Te6edf3meshchat \
Tff7b72-Tff7b72-Te6edf3shell Tff7b72/Te6edf3sbinTff7b72/Te6edf3nologin Te6edf3meshchat Tff7b72&Tff7b72& \
Te6edf3mkdir Tff7b72-Te6edf3p Tff7b72/Te6edf3config Tff7b72&Tff7b72& Te6edf3chown Te6edf3meshchatTff7b72:Te6edf3meshchat Tff7b72/Te6edf3config

Te6edf3COPY Tff7b72-Tff7b72-Te6edf3fromTff7b72=Te6edf3builder Tff7b72-Tff7b72-Te6edf3chownTff7b72=Te6edf3meshchatTff7b72:Te6edf3meshchat Tff7b72/Te6edf3optTff7b72/Te6edf3venv Tff7b72/Te6edf3optTff7b72/Te6edf3venv
Te6edf3COPY Te6edf3scriptsTff7b72/Te6edf3docker_entrypoint_chainguardTb4b4b4.Te6edf3py Tff7b72/Te6edf3dockerTff7b72-Te6edf3entrypointTb4b4b4.Te6edf3py

Te6edf3LABEL Te6edf3orgTb4b4b4.Te6edf3opencontainersTb4b4b4.Te6edf3imageTb4b4b4.Te6edf3sourceTff7b72=Ta5d6ff"Ta5d6ffhttps://github.com/Quad4-Software/MeshChatXTa5d6ff"
Te6edf3LABEL Te6edf3orgTb4b4b4.Te6edf3opencontainersTb4b4b4.Te6edf3imageTb4b4b4.Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffMeshChatX is a all in one Reticulum client.Ta5d6ff"
Te6edf3LABEL Te6edf3orgTb4b4b4.Te6edf3opencontainersTb4b4b4.Te6edf3imageTb4b4b4.Te6edf3licensesTff7b72=Ta5d6ff"Ta5d6ffMIT AND 0BSDTa5d6ff"
Te6edf3LABEL Te6edf3orgTb4b4b4.Te6edf3opencontainersTb4b4b4.Te6edf3imageTb4b4b4.Te6edf3authorsTff7b72=Ta5d6ff"Ta5d6ffQuad4Ta5d6ff"
Te6edf3LABEL Te6edf3orgTb4b4b4.Te6edf3opencontainersTb4b4b4.Te6edf3imageTb4b4b4.Te6edf3revisionTff7b72=Ta5d6ff"Ta5d6ff${OCI_REVISION}Ta5d6ff"
Te6edf3LABEL Te6edf3orgTb4b4b4.Te6edf3opencontainersTb4b4b4.Te6edf3imageTb4b4b4.Te6edf3versionTff7b72=Ta5d6ff"Ta5d6ff${OCI_VERSION}Ta5d6ff"
Te6edf3LABEL Te6edf3orgTb4b4b4.Te6edf3opencontainersTb4b4b4.Te6edf3imageTb4b4b4.Te6edf3createdTff7b72=Ta5d6ff"Ta5d6ff${OCI_CREATED}Ta5d6ff"

Te6edf3ENV Te6edf3PATHTff7b72=Ta5d6ff"Ta5d6ff/opt/venv/bin:$PATHTa5d6ff"
Te6edf3ENV Te6edf3PYTHONUNBUFFEREDTff7b72=T79c0ff1
Te6edf3ENV Te6edf3PYTHONDONTWRITEBYTECODETff7b72=T79c0ff1
Te6edf3ENV Te6edf3MESHCHAT_FORCE_WEB_AUDIOTff7b72=T79c0ff1

Te6edf3USER Te6edf3meshchat

Te6edf3HEALTHCHECK Tff7b72-Tff7b72-Te6edf3intervalTff7b72=T79c0ff30Te6edf3s Tff7b72-Tff7b72-Te6edf3timeoutTff7b72=T79c0ff5Te6edf3s Tff7b72-Tff7b72-Te6edf3startTff7b72-Te6edf3periodTff7b72=T79c0ff90Te6edf3s Tff7b72-Tff7b72-Te6edf3retriesTff7b72=T79c0ff3 \
Te6edf3CMD Tb4b4b4[Ta5d6ff"Ta5d6ffpythonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff-cTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffimport ssl, urllib.request; urllib.request.urlopen('https://127.0.0.1:8000/api/v1/status', context=ssl._create_unverified_context())Ta5d6ff"Tb4b4b4]

Te6edf3ENTRYPOINT Tb4b4b4[Ta5d6ff"Ta5d6ff/usr/bin/pythonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/docker-entrypoint.pyTa5d6ff"Tb4b4b4]
Te6edf3CMD Tb4b4b4[Ta5d6ff"Ta5d6ff/opt/venv/bin/meshchatxTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--host=0.0.0.0Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--reticulum-config-dir=/config/.reticulumTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--storage-dir=/config/.reticulum-meshchatxTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--headlessTa5d6ff"Tb4b4b4]


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────